package br.com.sge.dao;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import br.com.sge.modelo.Ano;
import br.com.sge.modelo.Cidade;
import br.com.sge.modelo.Ddd;
import br.com.sge.modelo.Estado;
import br.com.sge.modelo.Mes;
import br.com.sge.modelo.Orgao;
import br.com.sge.modelo.Pais;


public class GerarListasDAO 
{	
	TypedQuery<Cidade> consultarCidades;
	TypedQuery<Estado> consultarEstados; 
	TypedQuery<Pais> consultarPais;
	TypedQuery<Ano> consultarAno;
	TypedQuery<Orgao> consultarOrgao;
	TypedQuery<Mes> consultarMes;
	TypedQuery<Ddd> consultarDdd;
	TypedQuery<Ddd> consultarDddCelular;
	//TypedQuery<Dtnascimento> consultarDtNasc;
	
	EntityManager gerente;
	public EntityManager verificarAtiva(){
    	if(this.gerente == null){
    		this.gerente = new Conexao().obterConexao();
    	}
    	return gerente;
    }
	
	@SuppressWarnings("unchecked")
	public TypedQuery<Cidade> carregarCidades()
	{
		verificarAtiva();
		try
		{
			String consulta="select * from CIDADE as c order by c.descricao asc";
			consultarCidades = (TypedQuery<Cidade>) this.gerente.createNativeQuery(consulta,Cidade.class);
			
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta das cidade no Banco!!!");
			e.printStackTrace();
		}
	
		return consultarCidades;
		
		
		
	}
	@SuppressWarnings("unchecked")
	public TypedQuery<Estado> carregarEstados(){
		
		verificarAtiva();
		try
		{
			String consulta="select * from ESTADO as e order by e.descricao asc";
			consultarEstados = (TypedQuery<Estado>) this.gerente.createNativeQuery(consulta,Estado.class);
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta dos Estados no Banco!!!");
			e.printStackTrace();
		}
		return consultarEstados;	
	}
	@SuppressWarnings("unchecked")
	public TypedQuery<Pais> carregarPais()
	{
		verificarAtiva();
		try
		{
			String consulta="select * from PAIS as p order by p.descricao asc";
			consultarPais = (TypedQuery<Pais>) this.gerente.createNativeQuery(consulta,Pais.class);
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta dos Paises no Banco!!!");
			e.printStackTrace();
		}
		return consultarPais;
		
	}
	@SuppressWarnings("unchecked")
	public TypedQuery<Ddd> carregarDddFixo()
	{
		//this.conexao.obterConexao();
		verificarAtiva();
		try
		{
			String consulta ="select * from DDD as d order by d.cod_Area asc";
			consultarDdd = (TypedQuery<Ddd>) this.gerente.createNativeQuery(consulta,Ddd.class);
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta dos ddds no Banco!!!");
			e.printStackTrace();
		}
		return consultarDdd;
	}
	@SuppressWarnings("unchecked")
	public TypedQuery<Ddd> carregarDddCelular()
	{
		//this.conexao.obterConexao();
		verificarAtiva();
		try
		{
			String consulta ="select * from DDD as d order by d.cod_Area asc";
			consultarDddCelular = (TypedQuery<Ddd>) this.gerente.createNativeQuery(consulta,Ddd.class);
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta dos ddds no Banco!!!");
			e.printStackTrace();
		}
		return consultarDddCelular;
	}
	@SuppressWarnings("unchecked")
	public TypedQuery<Mes> carregarMes()
	{
		//this.conexao.obterConexao();
		verificarAtiva();
		try
		{
			String consulta ="select * from MES as m order by m.idMes";
			consultarMes = (TypedQuery<Mes>) this.gerente.createNativeQuery(consulta,Mes.class);
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta dos meses no Banco!!!");
			e.printStackTrace();
		}
		return consultarMes;
	}
	@SuppressWarnings("unchecked")
	/*public TypedQuery<Dtnascimento> carregarDtNasc()
	{
		try
		{
			String consulta ="select * from DTNASCIMENTO as dt order by dt.ano_Nasc";
			consultarDtNasc = (TypedQuery<Dtnascimento>) gerente.createNativeQuery(consulta,Dtnascimento.class);
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta dos data Nascimento no Banco!!!");
			e.printStackTrace();
		}
		return consultarDtNasc;
	}*/
	/*public TypedQuery<Ano> carregarAnosNasc()
	{
		try
		{
			String consulta ="select * from ANO as a order by a.descricao";
			consultarAno = (TypedQuery<Ano>) gerente.createNativeQuery(consulta,Ano.class);
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta dos data Nascimento no Banco!!!");
			e.printStackTrace();
		}
		return consultarAno;
	}*/
	public TypedQuery<Orgao> carregarOrgaoExpedidor()
	{
		verificarAtiva();
		try
		{
			String consulta ="select o from OrgaoExpedidor as o order by o.descricao";
			consultarOrgao = (TypedQuery<Orgao>) this.gerente.createQuery(consulta,Orgao.class);
		}
		catch(Exception e)
		{
			System.out.println("Houve um erro na consulta dos Orgãos Expedidores no Banco!!!");
			e.printStackTrace();
		}
		return consultarOrgao;
	}
}
